`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2020/09/23 14:50:42
// Design Name: 
// Module Name: CountLeading
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module CountLeading(
    input wire control,
    input wire [31:0] data,
    output wire [31:0] result
    );
    //control == 1 ----- clo
    //control == 0 ----- clz
    assign result = (control == 0 && data[31] == 1) ? 0 :
        (control == 0 && data[30] == 1) ? 1:
        (control == 0 && data[29] == 1) ? 2:
        (control == 0 && data[28] == 1) ? 3:
        (control == 0 && data[27] == 1) ? 4:
        (control == 0 && data[26] == 1) ? 5:
        (control == 0 && data[25] == 1) ? 6:
        (control == 0 && data[24] == 1) ? 7:
        (control == 0 && data[23] == 1) ? 8:
        (control == 0 && data[22] == 1) ? 9:
        (control == 0 && data[21] == 1) ? 10:
        (control == 0 && data[20] == 1) ? 11:
        (control == 0 && data[19] == 1) ? 12:
        (control == 0 && data[18] == 1) ? 13:
        (control == 0 && data[17] == 1) ? 14:
        (control == 0 && data[16] == 1) ? 15:
        (control == 0 && data[15] == 1) ? 16:
        (control == 0 && data[14] == 1) ? 17:
        (control == 0 && data[13] == 1) ? 18:
        (control == 0 && data[12] == 1) ? 19:
        (control == 0 && data[11] == 1) ? 20:
        (control == 0 && data[10] == 1) ? 21:
        (control == 0 && data[9]  == 1) ? 22:
        (control == 0 && data[8]  == 1) ? 23:
        (control == 0 && data[7]  == 1) ? 24:
        (control == 0 && data[6]  == 1) ? 25:
        (control == 0 && data[5]  == 1) ? 26:
        (control == 0 && data[4]  == 1) ? 27:
        (control == 0 && data[3]  == 1) ? 28:
        (control == 0 && data[2]  == 1) ? 29:
        (control == 0 && data[1]  == 1) ? 30:
        (control == 0 && data[0]  == 1) ? 31:
        (control == 0)  ? 32:
        (control == 1 && data[31] == 0) ? 0:
        (control == 1 && data[30] == 0) ? 1:
        (control == 1 && data[29] == 0) ? 2:
        (control == 1 && data[28] == 0) ? 3:
        (control == 1 && data[27] == 0) ? 4:
        (control == 1 && data[26] == 0) ? 5:
        (control == 1 && data[25] == 0) ? 6:
        (control == 1 && data[24] == 0) ? 7:
        (control == 1 && data[23] == 0) ? 8:
        (control == 1 && data[22] == 0) ? 9:
        (control == 1 && data[21] == 0) ? 10:
        (control == 1 && data[20] == 0) ? 11:
        (control == 1 && data[19] == 0) ? 12:
        (control == 1 && data[18] == 0) ? 13:
        (control == 1 && data[17] == 0) ? 14:
        (control == 1 && data[16] == 0) ? 15:
        (control == 1 && data[15] == 0) ? 16:
        (control == 1 && data[14] == 0) ? 17:
        (control == 1 && data[13] == 0) ? 18:
        (control == 1 && data[12] == 0) ? 19:
        (control == 1 && data[11] == 0) ? 20:
        (control == 1 && data[10] == 0) ? 21:
        (control == 1 && data[9]  == 0) ? 22:
        (control == 1 && data[8]  == 0) ? 23:
        (control == 1 && data[7]  == 0) ? 24:
        (control == 1 && data[6]  == 0) ? 25:
        (control == 1 && data[5]  == 0) ? 26:
        (control == 1 && data[4]  == 0) ? 27:
        (control == 1 && data[3]  == 0) ? 28:
        (control == 1 && data[2]  == 0) ? 29:
        (control == 1 && data[1]  == 0) ? 30:
        (control == 1 && data[0]  == 0) ? 31:
        32;
        
endmodule
